# 导入所需的库
import yfinance as yf  # 用于从雅虎财经下载股票数据
import datetime as dt  # 用于处理日期
import pandas as pd  # 用于数据处理和分析
from sklearn.preprocessing import StandardScaler  # 用于数据标准化

import plotly.graph_objs as go  # 用于绘制交互式图表（虽然这里没有用到）
from plotly.offline import iplot  # 用于离线绘制图表（虽然这里没有用到）
import matplotlib.pyplot as plt  # 用于绘制静态图表（虽然这里没有用到）

############ Dataset download #################
# 定义数据的起始日期和结束日期
start_date = dt.datetime(2013, 1, 1)  # 起始日期：2013年1月1日
end_date = dt.datetime(2024, 3, 7)  # 结束日期：2024年3月7日

# 从雅虎财经下载各公司的股票数据（仅获取开盘价）
google = yf.download("GOOGL", start_date, end_date)  # 下载谷歌（Alphabet）的股票数据
apple = yf.download("AAPL", start_date, end_date)  # 下载苹果公司的股票数据
Microsoft = yf.download("MSFT", start_date, end_date)  # 下载微软公司的股票数据
Amazon = yf.download("AMZN", start_date, end_date)  # 下载亚马逊公司的股票数据
meta = yf.download("META", start_date, end_date)  # 下载Meta（Facebook母公司）的股票数据
Nvidia = yf.download("NVDA", start_date, end_date)  # 下载英伟达公司的股票数据

# 将各公司的开盘价数据整合到一个DataFrame中
data = pd.DataFrame({
    'google': google['Open'],  # 谷歌的开盘价
    'microsoft': Microsoft['Open'],  # 微软的开盘价
    'amazon': Amazon['Open'],  # 亚马逊的开盘价
    'Nvidia': Nvidia['Open'],  # 英伟达的开盘价
    'meta': meta['Open'],  # Meta的开盘价
    'apple': apple['Open']  # 苹果的开盘价
})

############## Scaling data ######################
# 初始化标准化器
scaler = StandardScaler()

# 对数据进行标准化处理
# fit_transform()方法会先计算每个特征的均值和标准差，然后对数据进行标准化
# 标准化后的数据均值为0，标准差为1
data_scaled = pd.DataFrame(scaler.fit_transform(data), columns=data.columns)